#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Syslog测试工具打包脚本
"""

import subprocess
import sys
import os
from pathlib import Path

def build_test_syslog_exe():
    """构建 test_syslog.py 的 EXE 文件"""
    print("开始构建Syslog测试工具 EXE 文件...")
    
    # 当前目录
    current_dir = Path(__file__).parent
    
    # PyInstaller 命令参数
    cmd = [
        'pyinstaller',
        '--onefile',                    # 打包成单个文件
        '--console',                    # 保留控制台窗口（命令行工具）
        '--name=SyslogTestTool',        # 可执行文件名称
        '--clean',                      # 清理临时文件
        '--noconfirm',                  # 不询问确认
        'test_syslog.py'               # 主程序文件
    ]
    
    try:
        # 执行打包命令
        print(f"执行命令: {' '.join(cmd)}")
        result = subprocess.run(cmd, cwd=current_dir, check=True, 
                              capture_output=True, text=True, encoding='utf-8')
        
        print("\n=== 打包成功 ===")
        print(f"可执行文件位置: {current_dir / 'dist' / 'SyslogTestTool.exe'}")
        print("\n使用说明:")
        print("1. 将 dist 文件夹中的 'SyslogTestTool.exe' 复制到目标机器")
        print("2. 双击运行或在命令行中执行")
        print("3. 根据提示输入syslog服务器地址和端口")
        print("4. 选择测试类型进行syslog消息发送测试")
        
        return True
        
    except subprocess.CalledProcessError as e:
        print(f"\n=== 打包失败 ===")
        print(f"错误信息: {e}")
        print(f"标准输出: {e.stdout}")
        print(f"错误输出: {e.stderr}")
        return False

def create_test_tool_readme():
    """创建测试工具说明文件"""
    readme_content = '''
# Syslog测试工具 - 使用说明

## 工具简介
Syslog测试工具是一个用于向syslog服务器发送测试消息的命令行工具，支持多种测试场景。

## 系统要求
- Windows 7/8/10/11 (64位)
- 无需安装 Python 环境
- 需要网络连接到目标syslog服务器

## 使用方法
1. 双击运行 SyslogTestTool.exe
2. 输入目标syslog服务器地址（默认: localhost）
3. 输入syslog服务器端口（默认: 5140）
4. 选择测试类型

## 测试功能

### 1. 发送正常消息
- 发送预定义的正常系统消息
- 消息级别: INFO (6)
- 用于测试基本连接和消息接收

### 2. 发送告警消息
- 发送包含告警关键词的消息
- 消息级别: EMERGENCY/ALERT/CRITICAL/ERROR (0-3)
- 用于测试告警触发功能

### 3. 持续发送消息
- 在指定时间内持续发送消息
- 用于压力测试和性能测试
- 可自定义持续时间

### 4. 发送自定义消息
- 发送用户自定义的消息内容
- 可指定消息严重级别
- 用于特定场景测试

### 5. 综合测试
- 自动执行多种测试类型
- 包含正常消息和告警消息
- 用于全面功能验证

## 消息格式
工具发送的syslog消息格式符合RFC3164标准:
```
<优先级>时间戳 主机名 标签: 消息内容
```

## 严重级别说明
- 0: Emergency (紧急)
- 1: Alert (告警)
- 2: Critical (严重)
- 3: Error (错误)
- 4: Warning (警告)
- 5: Notice (通知)
- 6: Info (信息)
- 7: Debug (调试)

## 使用场景

### 开发测试
- 验证syslog服务器配置
- 测试日志接收功能
- 调试告警规则

### 系统集成
- 验证网络连通性
- 测试防火墙配置
- 确认端口开放状态

### 性能测试
- 测试服务器处理能力
- 验证高并发场景
- 评估系统稳定性

## 注意事项

1. **网络配置**
   - 确保目标服务器的UDP端口开放
   - 检查防火墙设置
   - 验证网络连通性

2. **权限要求**
   - 一般情况下无需特殊权限
   - 某些网络环境可能需要管理员权限

3. **测试建议**
   - 先进行少量消息测试
   - 逐步增加测试强度
   - 观察服务器响应情况

## 故障排除

### 连接失败
- 检查服务器地址和端口
- 验证网络连通性
- 确认防火墙设置

### 消息未接收
- 确认syslog服务正在运行
- 检查服务器日志
- 验证消息格式

### 性能问题
- 降低发送频率
- 减少并发连接
- 检查网络带宽

## 技术支持
如有问题，请检查:
1. 网络连接状态
2. 服务器配置
3. 防火墙设置
4. 端口占用情况
'''
    
    with open('Syslog测试工具说明.txt', 'w', encoding='utf-8') as f:
        f.write(readme_content)
    
    print("已创建说明文档: Syslog测试工具说明.txt")

def main():
    print("Syslog测试工具 EXE 打包程序")
    print("=" * 50)
    
    # 构建 EXE
    if build_test_syslog_exe():
        # 创建说明文档
        os.chdir('dist')
        create_test_tool_readme()
        
        print("\n=== 打包完成 ===")
        print("所有文件已生成在 dist 文件夹中")
        print("可以将 SyslogTestTool.exe 独立部署使用")
    else:
        print("\n打包失败，请检查错误信息")
        sys.exit(1)

if __name__ == '__main__':
    main()